+ /**
+ * Figure out if given input contains an explicit namespace.
+ *
+ * @param string $input
+ * @return false|array Array of namespace and remaining text, or false if no namespace given.
+ */
+ protected function extractNamespace( $input ) {
+ if ( strpos( $input, ':' ) === false ) {
+ return false;
+ }
+
+ // Namespace prefix only
+ $title = Title::newFromText( $input . 'Dummy' );
+ if (
+ $title &&
+ $title->getText() === 'Dummy' &&
+ !$title->inNamespace( NS_MAIN ) &&
+ !$title->isExternal()
+ ) {
+ return [ $title->getNamespace(), '' ];
+ }
+
+ // Namespace prefix with additional input
+ $title = Title::newFromText( $input );
+ if (
+ $title &&
+ !$title->inNamespace( NS_MAIN ) &&
+ !$title->isExternal()
+ ) {
+ // getText provides correct capitalization
+ return [ $title->getNamespace(), $title->getText() ];
+ }
+
+ return false;
+ }
+